문장 인코딩을 위한 임베딩 층
동일한 길이의 시퀀스의 원소는 고유한 단어의 인덱스에 해당하는 점수이다.
인덱스를 입력 특성으로 변환하는 몇 가지 방법이 있다.
원-핫 인코딩을 적용하면, 인덱스를 0또는 1로 이루어진 벡터로 변환할 수 있다.
각 단어는 전체 데이터의 고유한 단어의 수에 해당하는 크기를 가진 벡터로 변환된다.
(차원이 매우 커지기 때문에 차언의 저주(curse of dimensionality)로 인한 영향을 받을 수 있다.)
(하나를 제외하고 벡터의 원소가 0이기 때문에 특성 벡터가 매우 희소해진다.)
각 단어를 (정수가 아닌) 실수값을 가진 고정된 길이의 벡터로 변환한다.
고정된 길이의 벡터를 사용하여 무한히 많은 실수를 표현할 수 있다.
임베딩(embedding)이라고 하는 특성 학습 기법을 사용하여 데이터셋에 있는 단어를 표현하는 데 중요한 특성을 자동으로 학습할 수 있다.
고유한 단어의 수보다 훨씬 작게 임베딩 벡터(또는 임베딩 차원)크기를 선택하여 전체 어휘를 입력 특성으로 나타낸다.
임베딩의 장점특성 공간의 차원이 축소되므로, 차원의 저주로 인한 영향을 감소시킨다.
신경망에서 임베딩 층이 최적화(학습)되기 떄문에 중요한 특성이 추출된다.
토큰 개수가 n개 라고 할때, 패딩을 위한 인덱스 0과 토큰 집합에 없는 단어를 위해 예약된 n+1을 포함해서 (n+2)x embedding_dim
크기의 임베딩 행렬이 생성된다.
(행렬의 행은 토큰에 연관된 수치 특성을 표현)
만일 정수 i가 입력으로 임베딩 층에 주어지면 인덱스 i에 해당하는 행렬의 행을 찾아 수치 특성을 반환
tf.keras.layers.Embedding
from tensorflow.keras.layers import Embedding
model=tf.keras.Sequential()
model.add(Embedding(input_dim=100, output_dim=6, input_length=20, name='embed-layer'))
model.summary()
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embed-layer (Embedding) (None, 20, 6) 600
=================================================================
Total params: 600
Trainable params: 600
Non-trainable params: 0
_________________________________________________________________
모델의 입력: batchsize x input_length모델의 출력: batchsize x input_length x embedding_dim
input_dim: 모델이 입력으로 받을 고유한 정수 값(ex n+2)
임베딩 행렬의 크기는 100 x 6이다.
input_length를 꼭 지정해 주지 않고, 가변적인 경우 None으로 지정해 줄 수 있다.
하지만 Embedding층 다음에 Flatten 층이나 Dense 층을 두려면 input_legnth 매개변수를 꼭 지정해 주어야 한다.